package com.coupon.couponbatchsend100w.service.impl;

import com.coupon.couponbatchsend100w.service.CouponServiceV2;
import com.coupon.couponbatchsend100w.utils.TaskDisposeUtils;
import jakarta.annotation.Resource;
import lombok.SneakyThrows;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CountDownLatch;
@Service
public class CouponServiceV2Impl implements CouponServiceV2 {

    //    设置下发优惠券的数量：
    public static final Integer COUPON_NUMBER = 50 * 10000;

    @Resource
    private ThreadPoolTaskExecutor threadPool;

    /**
     * 下发50万条优惠券
     */
    @SneakyThrows
    @Override
    public void batchTaskActionV2()
    {
//        1.模拟要下发的50条优惠券，上游系统给我们的下发优惠券源头：
        List<String> coupons = getCoupons();
        long startTime = System.currentTimeMillis();
//        2.调用工具类批处理任务，这些优惠券coupon放入线程池threadPool，业务方法是disposeTaskV2
        TaskDisposeUtils.send(coupons,threadPool,TaskDisposeUtils::disposeTaskV2);
        //disposeTaskV：v1、v2、v3代表积分豆、优惠券、激活码等不同业务类型
        //只要在类中发现一些方法，形参返回值相同，仅方法名不同，就把他们统一简写成：类名::方法名的形式
        long endTime = System.currentTimeMillis();
        System.out.println("-----消耗时间："+(endTime - startTime)+" 毫秒");

   }


    //    下发优惠券的方法：
    private static List<String> getCoupons(){
        List<String> coupons = new ArrayList<>(COUPON_NUMBER);
        for (int i = 0; i < COUPON_NUMBER; i++) {
            coupons.add("优惠券："+i);
        }
        return coupons;
    }



}
